From: cwc22@centipede.cl.cam.ac.uk Date: Thu, 10 Mar 2005 14:05:30 +0000 (+0000) Subject: bitkeeper revision 1.1236.1.73 (4230542aNzdikO2FdRgaB46eNiQNHw) X-Git-Tag: archive/raspbian/4.8.0-1+rpi1~1^2~17857^2~56 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/success/%22http:/www.example.com/cgi/success?a=commitdiff_plain;h=b010a0e868d49a7e0fb3e79e8031e1ebf58765f1;p=xen.git bitkeeper revision 1.1236.1.73 (4230542aNzdikO2FdRgaB46eNiQNHw) Maintain count of mappings, and fast exit put_page check if none in use --- diff --git a/xen/common/grant_table.c b/xen/common/grant_table.c index 5ef5124960..b8302b6483 100644 --- a/xen/common/grant_table.c +++ b/xen/common/grant_table.c @@ -44,6 +44,7 @@ get_maptrack_handle( if ( unlikely((h = t->maptrack_head) == NR_MAPTRACK_ENTRIES) ) return -1; t->maptrack_head = t->maptrack[h].ref_and_flags >> MAPTRACK_REF_SHIFT; + t->map_count++; return h; } @@ -53,6 +54,7 @@ put_maptrack_handle( { t->maptrack[handle].ref_and_flags = t->maptrack_head << MAPTRACK_REF_SHIFT; t->maptrack_head = handle; + t->map_count--; } static int @@ -529,7 +531,7 @@ gnttab_unmap_grant_ref( if ( flush == 1 ) __flush_tlb_one(va); - else if ( flush ) + else if ( flush != 0 ) local_flush_tlb(); return 0; @@ -734,12 +736,19 @@ gnttab_check_unmap( int found = 0; lgt = ld->grant_table; + + /* Fast exit if we're not mapping anything using grant tables */ + if ( lgt->map_count == 0 ) + return 0; + rgt = rd->grant_table; +#ifdef GRANT_DEBUG if ( ld->id != 0 ) { DPRINTK("Foreign unref rd(%d) ld(%d) frm(%x) flgs(%x).\n", rd->id, ld->id, frame, readonly); } +#endif for ( handle = 0; handle < NR_MAPTRACK_ENTRIES; handle++ ) { diff --git a/xen/include/xen/grant_table.h b/xen/include/xen/grant_table.h index c161667cdf..9520fbca45 100644 --- a/xen/include/xen/grant_table.h +++ b/xen/include/xen/grant_table.h @@ -74,6 +74,7 @@ typedef struct { /* Mapping tracking table. */ grant_mapping_t *maptrack; unsigned int maptrack_head; + unsigned int map_count; /* Lock protecting updates to active and shared grant tables. */ spinlock_t lock; } grant_table_t;